package com.amiral.kupluk;


import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class KiblatView extends View{
	
	private float busur;
	private int lebar=240;
	private int tinggi=240;
	
	private Paint penandaGambar;
	private Paint paintText;
	private Paint gambarLingkaran;

	private String northString;
	
	private int textHeight;
	
	

	/** Konstruktor */
	public KiblatView(Context context){
		super(context);
		initKiblatView();
	}

	public KiblatView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		initKiblatView();
	}
	
	public KiblatView(Context context, AttributeSet attrs, int defStyle){
		super(context,attrs,defStyle);
		initKiblatView();
	}

	protected void initKiblatView() {
	    setFocusable(true);
	    
	    gambarLingkaran = new Paint(Paint.ANTI_ALIAS_FLAG);
	    gambarLingkaran.setColor(R.color.background_color);
	    gambarLingkaran.setStrokeWidth(1);
	    gambarLingkaran.setStyle(Paint.Style.FILL_AND_STROKE);

	    Resources r = this.getResources();
	    northString = r.getString(R.string.cardinal_north);
	   
	    paintText = new Paint(Paint.ANTI_ALIAS_FLAG);
	    paintText.setColor(r.getColor(R.color.text_color));

	    textHeight = (int)paintText.measureText("yY");

	    penandaGambar = new Paint(Paint.ANTI_ALIAS_FLAG);
	    penandaGambar.setColor(r.getColor(R.color.marker_color));
	  }
	

	@Override    
	  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
	    // The compass is a circle that fills as much space as possible.
	    // Set the measured dimensions by figuring out the shortest boundary,
	    // height or width.
//	    int measuredWidth = measure(widthMeasureSpec);
//	    int measuredHeight = measure(heightMeasureSpec);
//	    int d = Math.min(measuredWidth, measuredHeight);
	        
	    setMeasuredDimension(lebar, tinggi);
	  }
/*	
	private int measure(int measureSpec) {
	    int result = 0; 

	    // Decode the measurement specifications.
	    int specMode = MeasureSpec.getMode(measureSpec);
	    int specSize = MeasureSpec.getSize(measureSpec); 

	    if (specMode == MeasureSpec.UNSPECIFIED) {
	      // Return a default size of 200 if no bounds are specified. 
	      result = 200;
	    } else {
	      // As you want to fill the available space
	      // always return the full available bounds.
	      result = specSize;
	    } 
	    return result;
	  }
*/
	/** untuk mengatur arah*/
	  public void setBearing(float _bearing) {
	    busur = _bearing;
	  }
	  
	/** mengambil arah */
	  public float getBusur() {
	    return busur;
	  }
	  
	@Override 
	  protected void onDraw(Canvas canvas) {
	    int px = getMeasuredWidth() / 2;
	    int py = getMeasuredHeight() / 2 ;
	    int radius = Math.min(px, py);
	    
	    // Draw the background
	    canvas.drawCircle(px, py, radius, gambarLingkaran);
	    // Rotate our perspective so that the 'top' is
	    // facing the current bearing.
	    canvas.save();
	    canvas.rotate(-busur, px, py);
	    int textWidth = (int)paintText.measureText("W");
	    int cardinalX = px-textWidth/2;
	    int cardinalY = py-radius+textHeight;
//	    canvas.drawLine(px, py, cardinalX, cardinalY, markerPaint);
//	    canvas.save();
//	    canvas.rotate(-(bearing+295), px, py);
	    // Draw the marker every 15 degrees and a text every 45.
	    for (int i = 0; i < 24; i++) {
	      // Draw a marker.
//	    	canvas.drawLine(px, py-radius, px, py-radius+10, markerPaint);
	      
	    	canvas.save();
	    	canvas.translate(0, textHeight);
	      
	      // Draw the cardinal points
	    /*  if (i % getKiblat() == 0) {
			    String dirString = "KB";
			    int arrowY = 2*textHeight;
			        
			    canvas.drawLine(px, arrowY, px-5, 3*textHeight, markerPaint);
	            canvas.drawLine(px, arrowY, px+5, 3*textHeight, markerPaint);
              canvas.drawText(dirString, cardinalX, cardinalY, textPaint);
			}    */
	      if (i / 6 == 0) {
	        String dirString = "";
	        switch (i) {
	          case(0)  : {
	        	  dirString = northString;
                  int arrowY = 2*textHeight;
                  canvas.drawLine(px, arrowY, px-5, 3*textHeight, penandaGambar);
                  canvas.drawLine(px, arrowY, px+5, 3*textHeight, penandaGambar);
                  canvas.drawLine(px, py, px, arrowY, penandaGambar);
                  break;
	          }
//	          case(6)  : dirString = eastString; break;
//	          case(12) : dirString = southString; break;
//	          case(18) : dirString = westString; break;
	        }
//	        canvas.drawText(dirString, cardinalX, cardinalY, paintText);
	      }
	      else if (i % 3 == 0) {
	        // Draw the text every alternate 45deg
//	        String angle = String.valueOf(i*15);
//	        float angleTextWidth = textPaint.measureText(angle);
//
//	        int angleTextX = (int)(px-angleTextWidth/2);
//	        int angleTextY = py-radius+textHeight;
//	        canvas.drawText(angle, angleTextX, angleTextY, textPaint);
	      }
	     
		      
	      canvas.restore();

	      canvas.rotate(15, px, py);
	    }
	    canvas.restore();
	}

}
